The present invention relates to the field of computer graphics, and in particular to methods and apparatus for posing jointed models using inverse kinematics. Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time. A great deal of effort has been devoted to making realistic looking rendered images and animations.
In computer-generated animation, an object's appearance is defined by a three-dimensional computer model. A pose is the realized geometry of a model. Animators often specify poses of models at one or more discrete moments of time, referred to as keyframes. Animation software tools then determine the poses of models at any intermediate moments of time, referred to as in-between or intermediate frames. To appear realistic, the computer model of an object is often extremely complex, having millions of surfaces and tens of thousands of attributes. Due to the complexity involved with animating such complex models, particularly character models with hundreds or thousands of degrees of freedom, animation tools often rely on animation variables to define the animation of objects.
Many models include complex hierarchies of joints. For example, a character model can include a shoulder joint connected between a torso model and an upper arm model, an elbow joint connected between the upper arm model and a lower arm model, a wrist joint connected between the lower arm model and a hand model, and several finger joints connected between the hand model and finger models. The pose or positions and orientations of all of these portions of the character model's arm is specified at least in part by the joint rotation angles and/or joint positions of the shoulder joint, the elbow joint, the wrist joint, and the finger joints. The animation tools use these joint angles, joint positions, and/or potentially other parameters, referred to generally as animation variables, to determine the position, orientation, deformation, and potentially other properties of the character model.
Animators typically define animation variable values, such as joint angles and joint positions, at specific frames or discrete moments of time. The value of an animation variable along with its associated time is referred to as a control knot. Animation tools often interpolate animation variable values between control knots to determine the pose of models at other frames or moments of time.
Animators can specify the joint rotation angles of joints directly to define a pose of a character model. This is referred to as forward kinematics. However, this is often time consuming and unintuitive, especially for limbs and other objects composed of numerous joints.
Inverse kinematics allows animators to specify all or a portion of a pose in terms of desired joint positions for a portion of the joints. The animation tools then determine the specific joint rotation angles, joint positions, and other parameters, such as scaling or shearing, for the other joints required to achieve this pose. For example, an animator may specify that the hand of character model should contact another object in a scene. The animation tools then calculate the joint rotation angles for the shoulder, elbow, and wrist joints necessary for the hand to contact the object as specified. Animation tools often take into account constraints, such as limits on the range of joint rotations, to ensure that the final pose of the model appears realistic. For example, an elbow joint may be constrained to a range of 150 degrees of rotation to prevent the animation tools from setting this joint's rotation angles outside of the range of motion possible in human anatomy. Inverse kinematics techniques often analyze the potential energy of jointed models to determine the pose of jointed models.
Inverse kinematics techniques face the issue that animator-supplied constraints are often inadequate to specify a unique configuration. For example there are a wide variety of ways an arm can be posed while keeping a finger touching a desired object. A common solution to this problem is to introduce an optimization function that ranks joint configurations. The highest ranking configuration meeting the constraints is the one that will be chosen.
It is possible to use an unchanging optimization function to pose models, but doing so often requires the introduction of a large number of constraints to create current poses. This may make the system cumbersome to use. Alternatively, the optimization function can be made to depend on the history of posing, with a preference for shapes that resemble the most recent pose. A problem with the history-based technique is that once the model reaches a contorted or unusual configuration, standard history-based techniques make it difficult to return to more desirable configurations.